package br.com.gestacard.sync.entidade;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.ForeignKey;


@MappedSuperclass
public abstract class ExtratoContaCorrente extends AppBaseEntity {

	private static final long serialVersionUID = 2400783875091039111L;

	
	@Id @GeneratedValue(strategy=GenerationType.AUTO, generator = "SE_EXTRATO_CONTA_CORRENTE")
	@Column (name = "ID_EXTRATO_CONTA_CORRENTE", nullable=false, length=5)
	private Long id;
	
	@Column (name = "DATA_MUNIMENTACAO", nullable=false, length=11)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataMovimentacao;
	
	@Column (name = "DATA_IMPORTACAO", nullable=false, length=11)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataImportacao = new Date();
	
	@ManyToOne (targetEntity = CoordenadorEntity.class, fetch = FetchType.LAZY)
	@ForeignKey(name="FK_EXTCTCORRENTE_COORDENADOR")
	@JoinColumn (name = "ID_COORDENADOR", nullable=false)
	private Coordenador coordenador;
	
	@Column (name = "VLR_DEPOSITO", nullable=false, length=5)
	private BigDecimal vlrDeposito;
	
	@ManyToOne (targetEntity = ContaCorrenteEntity.class, fetch = FetchType.LAZY)
	@ForeignKey(name="FK_EXTCTCORRENTE_CTCORRENTE")
	@JoinColumn (name = "ID_CONTA_CORRENTE", nullable=false)
	private ContaCorrente contaCorrente;

	@Column (name = "ID_CONTROLE_EXTRATO", nullable=false, length=5)
	private Long controleEstrato;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id=id;
	}

	public Date getDataMovimentacao() {
		return dataMovimentacao;
	}

	public void setDataMovimentacao(Date dataMovimentacao) {
		this.dataMovimentacao=dataMovimentacao;
	}

	public Date getDataImportacao() {
		return dataImportacao;
	}

	public void setDataImportacao(Date dataImportacao) {
		this.dataImportacao=dataImportacao;
	}

	public Coordenador getCoordenador() {
		return coordenador;
	}

	public void setCoordenador(Coordenador coordenador) {
		this.coordenador=coordenador;
	}

	public BigDecimal getVlrDeposito() {
		return vlrDeposito;
	}

	public void setVlrDeposito(BigDecimal vlrDeposito) {
		this.vlrDeposito=vlrDeposito;
	}

	public ContaCorrente getContaCorrente() {
		return contaCorrente;
	}

	public void setContaCorrente(ContaCorrente contaCorrente) {
		this.contaCorrente=contaCorrente;
	}

	public Long getControleEstrato() {
		return controleEstrato;
	}

	public void setControleEstrato(Long controleEstrato) {
		this.controleEstrato = controleEstrato;
	}

}
